;功能：除法溢出（实验10，207页）
;方法：
;   X/N = int(H/N)*65536 +[rem(H/N)*65536+L]/N
; 	*65536等价于左移16位
; 	int(H/N)，X/N高16位商
; 	[rem(H/N)*65536+L]/N，X/N低16位商，X/N余数
; 	1000001/10(F4240H/0AH),(dx)=0001H,(ax)=86AOH,(cx)=1
assume cs:code

code segment
start:	
		mov ax,4240h
		mov dx,0fh
		mov cx,0ah

		call divdw
		mov ax,4c00h
		int 21h

		;参数：(ax)=被除数低16位  	(dx)=被除数高16位
		;	  (cx)=除数
		;返回：X/N = int(H/N)*65536+[rem(H/N)*65536+L]/N
		;	  (dx)=结果的高16位  int(H/N)
		;	  (ax)=结果的低16位  [rem(H/N)*65536+L]/N
		;	  (cx)=余数         [rem(H/N)*65536+L]/N
divdw:	
		;利用bx寄存器暂存ax寄存器的值（被除数低16位）
		mov bx,ax

		;H/N
		mov ax,dx
		mov dx,0
		;(ax)=int(H/N)（X/N高16位商） (dx)=rem(H/N)
		div cx
		;利用si寄存器暂存ax寄存器的值（X/N高16位商）
		mov si,ax

		;(ax)=L  (dx)=rem(H/N)
		mov ax,bx
		;[rem(H/N)*65536+L]/N
		;(ax)=X/N低16位商  (dx)=余数
		div cx

		;(cx)=余数
		mov cx,dx
		;(dx)=X/N高16位商
		mov dx,si
		ret

code ends
end start